/*
 * 
 * Mysql-backed implementation of the user interface.
 * Needs the following table:
 * 
 * CREATE TABLE  `webdb`.`utente` (
 * `ID` int(10) unsigned NOT NULL auto_increment,
 * `nickname` varchar(50) NOT NULL,
 * PRIMARY KEY  (`ID`)
 * );
 */
package it.univaq.f4i.iw.ex.album.model.impl;

import it.univaq.f4i.iw.ex.album.model.User;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserMysqlImpl implements User {

    private int key;
    private String nickname;
    //proprietà non esposte dall'interfaccia, usate solo per questa implementazione
    //these properties are not available to the user, but only to the implementation    
    private PhotoAlbumDataLayerMysqlImpl datalayer;

    //notare che i costruttori che seguono sono entrambi
    //package-private, cioè possono essere richiamati
    //solo da classi all'interno dello stesso package
    //(tra cui le API del modello dati), ma risultano
    //invisibili all'utente (che non può usare quindi la
    //new per creare istanze di questa classe)
    //costrutture "vuoto" usato per inizializzare gli oggetti
    //notare che queste classi hanno bisogno di un riferimento
    //alle API del modello dati per eseguire alcune operazioni
    // note that following constructors are
    // package-private, i.e., they can be called
    // only by classes in the same package
    // (including the data layer class), but are
    // invisible to the user (the operator new cannot be
    // used to create instances of this class)
    //  this is an "empty" constructor 
    // note that these classes need a reference
    // to the data layer API to perform some operations
    UserMysqlImpl(PhotoAlbumDataLayerMysqlImpl datalayer) {
        key = 0;
        nickname = "";
        this.datalayer = datalayer;
    }

    UserMysqlImpl(PhotoAlbumDataLayerMysqlImpl datalayer, ResultSet data) throws SQLException {
        this.datalayer = datalayer;
        key = data.getInt("ID");
        nickname = data.getString("nickname");
    }

    /**
     * @return the key
     */
    public int getKey() {
        return key;
    }

    /**
     * @param key the key to set
     */
    public void setKey(int key) {
        this.key = key;
    }

    /**
     * @return the nickname
     */
    public String getNickname() {
        return nickname;
    }

    /**
     * @param nickname the nickname to set
     */
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
}
